/* 引入router实例 */
import router from "@/router";
/* 引入store实例 */
import store from "@/store";
/* 引入进度条 */
import NProgress from "nprogress";

import {Message} from "element-ui";
import {getToken} from "@/utils/localStorage";

/* 黑名单数组(登录才能访问的页面) */
const blackList = ["/trade", "/pay", "/paysuccess", "/center", "/center/myorder", "/center/grouporder"]

router.beforeEach(async (to, from, next) => {
    NProgress.start()
    const token = getToken()
    const useInfo = store.state.userStore.userInfo.id
    /*判断是否有token，如果有token则代表用户已经登录了*/
    if (token) {
        // 登录了
        if (to.path === "/login") {
            // 已经登录了但是还想去登录页(停留在当前页)
            next(false)
            Message.info("您已登录")
            NProgress.done()
        } else {
            // 已经登录了但是去的不是登录页（判断是否有用户信息 如果有则放行，如果没有，获取用户信息然后放行，如果用户信息获取失败则是token过期跳转到登录页）
            if (useInfo) {
                // 有用户信息
                next()
            } else {
                // 没有用户信息
                try {
                    // 派发actions获取用户信息
                    await store.dispatch("userStore/fetchUserInfo")
                    // 放行
                    next()
                } catch (e) {
                    // 用户信息获取失败
                    Message.info("身份过期")
                    // 清空用户信息
                    await store.dispatch("userStore/userLogout")
                    // 当前路由路径
                    const return_url = to.fullPath
                    // 携带当前路由路径跳转到登录页
                    next({name: "login", query: {return_url}})

                }
            }
        }
    } else {
        //没有登录
        // 没有登录去的是黑名单页面
        if (blackList.includes(to.path)) {
            const retuen_url = to.fullPath
            next({name: "login", query: {retuen_url}})
            NProgress.done()
        } else {
            // 没有登录去的不是是黑名单页面
            next()
        }
    }

})

router.afterEach((to, from) => {
    NProgress.done()
})
